<?php
class IndexAction extends BaseAction
{


	static private $class_list = array(
		'red_obelisk'	=> '红方舟',
		'blue_obelisk'	=> '蓝方舟',
		'green_obelisk'	=> '绿方舟',
		'artifact'		=> '神器',
		'cave_entrance'	=> '洞穴入口',
		'dossier'		=> '图鉴',
		'note'			=> '生存者笔记',
		'cave_crate'	=> '洞穴宝箱',
		'sea_crate'		=> '深海宝箱',
		'beacon_crate'	=> '光柱补给箱'
	);


	/* 首页
	 *
	 */
	public function index()
	{
		$map_name = strval( trim($_GET['map']) );
		if(!$map_name)
		{
			trigger_error('未指定地图', E_USER_ERROR);
		}
		$this->read_map($map_name);
	}


	/* 读取地图
	 *
	 */
	private function read_map($map_name)
	{
		// 获取坐标点数据
		$where_map_data['map_name'] = array('eq', $map_name);
		$where_map_data['is_show'] = array('eq', 1);
		$field_map_data = array('map_name', 'name', 'class', 'class', 'lng', 'lat');
		$map_data = D('map')->where($where_map_data)->field($field_map_data)->select();
		if($map_data === FALSE)
		{
			trigger_error('数据库错误：无法获取地图坐标点数据', E_USER_ERROR);
		}
		if(!$map_data)
		{
			trigger_error('数据集为空，请检查地图名称或数据库。', E_USER_ERROR);
		}
		// 循环处理数据
		foreach($map_data as $m=>$n)
		{
			$map_data[$m]['name'] = $n['name'] . "\n"  . '纬度：' . $n['lat'] . '，经度：' . $n['lng'];
		}
		// 获取地图信息
		$where_map_info['map_name'] = array('eq', $map_name);
		$where_map_info['is_show'] = array('eq', 1);
		$map_info = D('map_info')->where($where_map_info)->find();
		if($map_info === FALSE)
		{
			trigger_error('数据库错误：无法获取地图信息', E_USER_ERROR);
		}
		if(!$map_info)
		{
			trigger_error('地图信息丢失', E_USER_ERROR);
		}
		// 处理背景图路径
		$map_info['bg_img'] = __APP_PUBLIC__ . '/' . $map_info['bg_img'];
		// 获取全部class名，并去重
		$class_list = array_column($map_data, 'class');
		$class_list = array_unique($class_list);
		// 替换class名（光柱补给箱）
		foreach($class_list as $m=>$n)
		{
			if( preg_match('/^\S+_crate_\d+$/', $n, $match) )
			{
				$class_list[$m] = 'beacon_crate';
			}
		}
		// 再次去重
		$class_list = array_unique($class_list);
		// 数组重排
		$class_list = array_merge($class_list);
		// 整理数据
		foreach($class_list as $m=>$n)
		{
			$class_list[$m] = array(
				'name'		=> $n,
				'name_zh'	=> self::$class_list[$n]
			);
		}

		// 返回数据
		$this->assign('map_info', $map_info);
		$this->assign('map_data', $map_data);
		$this->assign('map_name', $map_name);
		$this->assign('button_list', $class_list);
		$this->display();
	}


}
